
// 包声明：该类属于 com.xg.handler 包
package com.xg.validator.exception;

// 导入自定义异常类
import com.xg.validator.exception.ValidationException;

// Spring Web 相关导入
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

// 使用 @RestControllerAdvice 表示这是一个全局异常处理类，适用于所有 Controller
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理自定义的参数校验异常 ValidationException
     *
     * @param ex 抛出的 ValidationException 异常实例
     * @return 带有错误信息的 ResponseEntity 响应对象
     */
    @ExceptionHandler(ValidationException.class)
    public ResponseEntity<Map<String, Object>> handleValidationException(ValidationException ex) {
        // 构建统一格式的响应数据
        Map<String, Object> response = new HashMap<>();
        response.put("code", HttpStatus.BAD_REQUEST.value());       // 400 错误码
        response.put("message", "参数校验失败");                    // 统一提示信息
        response.put("details", ex.getErrors());                    // 具体字段错误信息

        // 返回 HTTP 400 响应
        return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
    }

    /**
     * 捕获并处理其他未明确声明的系统异常
     *
     * @param ex 发生的普通异常对象
     * @return 带有错误信息的 ResponseEntity 响应对象
     */
    @ExceptionHandler(Exception.class)
    public ResponseEntity<Map<String, Object>> handleOtherExceptions(Exception ex) {
        // 构建统一格式的系统错误响应
        Map<String, Object> response = new HashMap<>();
        response.put("code", HttpStatus.INTERNAL_SERVER_ERROR.value()); // 500 错误码
        response.put("message", "系统错误：" + ex.getMessage());         // 输出异常信息

        // 返回 HTTP 500 响应
        return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}